--lua脚本，在订单下单的时候
-- 判断优惠卷的库存是否充足
-- 判断用户原来下单没有，确保一人一单
-- 在redis里面扣减库存，下单用户保存到redis里面，将订单信息放入到redis的消息队列里面
-- 1.1 优惠券id
local voucherId=ARGV[1]
-- 1.2 用户id
local userId=ARGV[2]
-- 1.3 订单id
local orderId=ARGV[3]

-- 上面设置了三个参数，所以以后在调用这个lua脚本的时候，要传递过来三个参数

-- 2.数据key
-- 2.1 库存key  在lua脚本里面，用..作为拼接
local stockKey='seckill:stock:'..voucherId
-- 2.2 订单key  订单在redis里面的value是set集合，存放的是那些用户购买了这个订单
local orderKey='seckill:order:'..voucherId

-- 3.lua脚本业务
-- 3.1 判断库存是否充足 get stockKey
if(tonumber(redis.call('get',stockKey))<=0) then
   -- 3.2 库存不足，返回1
   return 1
end
-- 3.2.判断用户是否下单 sismember orderKey userId
if(redis.call('sismember',orderKey,userId)==1) then
   --3.3.存在，说明是重复下单，返回2
   return 2
end
-- 3.4.扣减库存 incrby stockKey -1
redis.call('incrby',stockKey,-1)
-- 3.5.下单(保存用户)sadd orderKey userId
redis.call('sadd',orderKey,userId)
-- 3.6.发送消息到队列里面 xadd stream.orders * k1 v1 k2 v2   发送到消息到stream.orders这个队列里面
-- k1 v1 k2 v2
-- 这里是在消息队列里面用到的，异步阻塞队列没有用到
redis.call('xadd','stream.orders','*','userId',userId,'voucherId',voucherId,'id',orderId);

-- 成功返回0
return 0
